from cn2an import an2cn
import re


def convert_numbers_in_string(s):
    # 正则表达式匹配数字（支持整数、小数、负数）
    pattern = r'-?\d+\.?\d*'

    def replace_func(match):
        num_str = match.group()
        try:
            # 尝试转换数字
            return an2cn(num_str)
        except ValueError:
            # 若转换失败（如非有效数字），返回原内容
            return num_str

    # 替换字符串中所有匹配的数字
    return re.sub(pattern, replace_func, s)


# 测试示例
num_str = "你好打132法1师789.01沙发"
result = convert_numbers_in_string(num_str)
print(result)  # 输出：你好打法师七百八十九点零一沙发